package main

/*
(1)
$ curl -i http://localhost:9999/
//-i: 这是 curl 命令的一个选项，代表 "include"（包含）。使用这个选项，curl 在输出中会包含响应的头信息。
HTTP/1.1 200 OK
Date: Mon, 12 Aug 2019 16:52:52 GMT
Content-Length: 18
Content-Type: text/html; charset=utf-8
<h1>Hello Gee</h1>

(2)
$ curl "http://localhost:9999/hello?name=geektutu"
hello geektutu, you're at /hello

(3)
$ curl "http://localhost:9999/login" -X POST -d 'username=geektutu&password=1234'
{"password":"1234","username":"geektutu"}

(4)
$ curl "http://localhost:9999/xxx"
404 NOT FOUND: /xxx
*/

import (
	"encoding/json"
	"net/http"

	"gee"
)

func main() {
	r := gee.New()
	r.GET("/", func(c *gee.Context) {
		c.HTML(http.StatusOK, "<h1>Hello Gee</h1>")
	})
	r.GET("/hello", func(c *gee.Context) {
		// expect /hello?name=geektutu
		c.String(http.StatusOK, "hello %s, you're at %s\n", c.Query("name"), c.Path)
	})
	//$ curl "http://localhost:9999/login" -X POST -d 'username=woshihahaha&password=woshihahaha123123'
	//-X POST: 这是 curl 命令的一个选项，用于指定 HTTP 请求的方法。在这里，使用 -X POST 表示你要发送一个 HTTP POST 请求。
	//-d 'username=geektutu&password=4': 这是 curl 命令的另一个选项，用于在请求中包含数据。
	//-d 后面跟着的是要发送的数据，形式为 'key=value&key=value'。在这个例子中，你正在发送两个参数，一个是 username，值为 geektutu，另一个是 password，值为 4。这些参数将被包含在 POST 请求的消息体中。
	r.POST("/login", func(c *gee.Context) {
		//c.JSON(http.StatusOK, gee.H{
		//	"username": c.PostForm("username"),
		//	"password": c.PostForm("password"),
		//})
		obj := map[string]interface{}{
			"username": c.Req.FormValue("username"),
			"password": c.Req.FormValue("password"),
		}
		c.SetHeader("Content-Type", "application/json")
		c.Status(http.StatusOK)
		encoder := json.NewEncoder(c.Writer)
		if err := encoder.Encode(obj); err != nil {
			http.Error(c.Writer, err.Error(), 500)
		}
	})

	r.Run(":9999")
}
